$$ \newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} \newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} \renewcommand{\mod}{\,\mathrm{mod}\,} \renewcommand{\div}{\,\mathrm{div}\,} \newcommand{\metar}{\,\mathrm{m}} \newcommand{\cm}{\,\mathrm{cm}} \newcommand{\dm}{\,\mathrm{dm}} \newcommand{\litar}{\,\mathrm{l}} \newcommand{\km}{\,\mathrm{km}} \newcommand{\s}{\,\mathrm{s}} \newcommand{\h}{\,\mathrm{h}} \newcommand{\minut}{\,\mathrm{min}} \newcommand{\kmh}{\,\mathrm{\frac{km}{h}}} \newcommand{\ms}{\,\mathrm{\frac{m}{s}}} \newcommand{\mss}{\,\mathrm{\frac{m}{s^2}}} \newcommand{\mmin}{\,\mathrm{\frac{m}{min}}} \newcommand{\smin}{\,\mathrm{\frac{s}{min}}} $$

Prijavi problem


Obeleži sve kategorije koje odgovaraju problemu

Još detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link.
Nažalost nismo trenutno u mogućnosti da obradimo vaš zahtev.
Molimo vas da pokušate kasnije.

C++
C#

Баратање битовима

Подаци неозначених целобројних типова се у рачунару записују у бинарном запису, док се за означене целе бројеве користи потпуни комплемент. На пример, осмобитни записи из прве колоне могу да се тумаче као неозначени цели бројеви (unsigned char), из опсега 0..255, или као означени цели бројеви (char), из опсега -128..127.

запис вредност неозначеног броја вредност означеног броја 00000000 0 0 00000001 1 1 00000010 2 2 00000011 3 3 00000100 4 4 ... 01111110 126 126 01111111 127 127 10000000 128 -128 10000001 ... 11111110 254 -2 11111111 255 -1

Операције над битовима могу као аргументе да користе и означене и неозначене целобројне податке. У рачунарству је много чешћа и важнија употреба ових операција над неозначеним целобројним подацима, па ћемо у задацима из ове групе углавном да се бавимо неозначеним целим бројевима.

Целобројне константе могу у програмима да се запишу у бинарном систему, тако што се испред бинарног записа дода ознака 0b. На пример, записи 21 и 0b10101 су равноправни у програмима. Могућ је и запис у хексадекадном систему, тако што се испред хексадекадног записа дода ознака 0x. Тако је и 0x15 још један равноправан запис броја 21 (јер \(1 \cdot 16 + 5 = 21\)).

Над битовима целобројних података могу да се врше логичке битовне операције. Операција битовне конјункције се означава знаком &, битовна дисјункција знаком |, битовна негација знаком ~, а екслклузивна дисјункција знаком ^. Ове операције се изводе на свакој позицији истовремено и независно од осталих позиција. На пример, важи да је:

0b00111100 & 0b01010101 == 0b00010100 0b00111100 | 0b01010101 == 0b01111101 0b00111100 ^ 0b01010101 == 0b01101001 ~0b00111100 == 0b11000011

Последња једнакост важи под претпоставком да је резултат операције на левој страни осмобитан (у противном треба дописати одговарајући број водећих јединица).

Осим ових, логичких битовних операција, над битовима могу да се изводе и операције померања битова (енгл. shift) за дати број места улево или удесно. За померање улево се користи ознака <<, а за померање удесно ознака >>. На пример, важи да је:

0b00011010 >> 2 == 0b00000110 0b00011010 << 2 == 0b01101000

При овим операцијама помак мора да буде мањи од броја битова податка. Могуће је да се при померању неки битови и изгубе, на пример

0b00011010 >> 5 == 0b00000000

Постоји један важан специјалан случај померања битова, а то је померање бинарног записа јединице. На пример, ако је потребно \(k\)-ти бит броја \(a\) слева (бројећи од нуле) поставити на 1, то можемо да урадимо наредбом a = a | (1<<k)

pozicije k...210 a == aaaaaАaaaaaa 1<<k == 000001000000 ----------------------------- a | (1<<k) == aaaaa1aaaaaa

Слично томе, ако је потребно \(k\)-ти бит броја \(a\) слева (бројећи од нуле) поставити на 0, то можемо да урадимо наредбом a = a & ~(1<<k)

pozicije k...210 a == aaaaaАaaaaaa ~(1<<i) == 111110111111 ----------------------------- a & ~(1<<k) == aaaaa0aaaaaa

Померање јединице је важно и због тога што се помоћу њега може формирати бит-маска од \(k\) узастопних јединица, помоћу које може да се обрађује \(k\) узастопних позиција:

pozicije k...210 1 << k == 000001000000 (1 << k) - 1 == 000000111111

Kада желимо да издвојимо \(k\)-ти бит броја \(a\) слева (бројећи од нуле), можемо прво да померимо број \(a\) за \(k\) места удесно, а затим израчунамо конјункцију добијеног броја и јединице:

pozicije k...210 a == aaaaaАaaaaaa a >> k == 000000aaaaaА 1 == 000000000001 ----------------------------- (a>>k) & 1 == 00000000000A

Баратање битовима

Подаци неозначених целобројних типова се у рачунару записују у бинарном запису, док се за означене целе бројеве користи потпуни комплемент. На пример, осмобитни записи из прве колоне могу да се тумаче као неозначени цели бројеви (byte), из опсега 0..255, или као означени цели бројеви (sbyte), из опсега -128..127.

запис вредност неозначеног броја вредност означеног броја 00000000 0 0 00000001 1 1 00000010 2 2 00000011 3 3 00000100 4 4 ... 01111110 126 126 01111111 127 127 10000000 128 -128 10000001 ... 11111110 254 -2 11111111 255 -1

Операције над битовима могу као аргументе да користе и означене и неозначене целобројне податке. У рачунарству је много чешћа и важнија употреба ових операција над неозначеним целобројним подацима, па ћемо у задацима из ове групе углавном да се бавимо неозначеним целим бројевима.

Целобројне константе могу у програмима да се запишу у бинарном систему, тако што се испред бинарног записа дода ознака 0b. На пример, записи 21 и 0b10101 су равноправни у програмима. Могућ је и запис у хексадекадном систему, тако што се испред хексадекадног записа дода ознака 0x. Тако је и 0x15 још један равноправан запис броја 21 (јер \(1 \cdot 16 + 5 = 21\)).

Над битовима целобројних података могу да се врше логичке битовне операције. Операција битовне конјункције се означава знаком &, битовна дисјункција знаком |, битовна негација знаком ~, а екслклузивна дисјункција знаком ^. Ове операције се изводе на свакој позицији истовремено и независно од осталих позиција. На пример, важи да је:

0b00111100 & 0b01010101 == 0b00010100 0b00111100 | 0b01010101 == 0b01111101 0b00111100 ^ 0b01010101 == 0b01101001 ~0b00111100 == 0b11000011

Последња једнакост важи под претпоставком да је резултат операције на левој страни осмобитан (у противном треба дописати одговарајући број водећих јединица).

Осим ових, логичких битовних операција, над битовима могу да се изводе и операције померања битова (енгл. shift) за дати број места улево или удесно. За померање улево се користи ознака <<, а за померање удесно ознака >>. На пример, важи да је:

0b00011010 >> 2 == 0b00000110 0b00011010 << 2 == 0b01101000

При овим операцијама помак мора да буде мањи од броја битова податка. Могуће је да се при померању неки битови и изгубе, на пример

0b00011010 >> 5 == 0b00000000

Постоји један важан специјалан случај померања битова, а то је померање бинарног записа јединице. На пример, ако је потребно \(k\)-ти бит броја \(a\) слева (бројећи од нуле) поставити на 1, то можемо да урадимо наредбом a = a | (1<<k)

pozicije k...210 a == aaaaaАaaaaaa 1<<k == 000001000000 ----------------------------- a | (1<<k) == aaaaa1aaaaaa

Слично томе, ако је потребно \(k\)-ти бит броја \(a\) слева (бројећи од нуле) поставити на 0, то можемо да урадимо наредбом a = a & ~(1<<k)

pozicije k...210 a == aaaaaАaaaaaa ~(1<<i) == 111110111111 ----------------------------- a & ~(1<<k) == aaaaa0aaaaaa

Померање јединице је важно и због тога што се помоћу њега може формирати бит-маска од \(k\) узастопних јединица, помоћу које може да се обрађује \(k\) узастопних позиција:

pozicije k...210 1 << k == 000001000000 (1 << k) - 1 == 000000111111

Kада желимо да издвојимо \(k\)-ти бит броја \(a\) слева (бројећи од нуле), можемо прво да померимо број \(a\) за \(k\) места удесно, а затим израчунамо конјункцију добијеног броја и јединице:

pozicije k...210 a == aaaaaАaaaaaa a >> k == 000000aaaaaА 1 == 000000000001 ----------------------------- (a>>k) & 1 == 00000000000A

Баратање битовима — zadaci

Бинарни и хексадекадни запис броја

Za ovaj zadatak možete videti rešenje
pokušalo: 56, rešilo: 80%

Припадност истој мрежи

Za ovaj zadatak možete videti rešenje
pokušalo: 73, rešilo: 98%

Представљање интернет адресе

Za ovaj zadatak možete videti rešenje
pokušalo: 52, rešilo: 90%

Упис групе битова

Za ovaj zadatak možete videti rešenje
pokušalo: 51, rešilo: 84%

Вредност групе битова

pokušalo: 34, rešilo: 91%

Постављање групе битова на 1

pokušalo: 36, rešilo: 94%

Брисање групе битова

pokušalo: 32, rešilo: 93%

Размена групе битова

pokušalo: 30, rešilo: 73%

Преузимање поште

pokušalo: 21, rešilo: 80%

Позиција бита

Za ovaj zadatak možete videti rešenje
pokušalo: 28, rešilo: 92%

Број јединица у бинарном запису

Za ovaj zadatak možete videti rešenje
pokušalo: 34, rešilo: 88%

Парност броја јединица у бинарном запису

Za ovaj zadatak možete videti rešenje
pokušalo: 49, rešilo: 97%

Број различитих битова

pokušalo: 26, rešilo: 96%

Битови у обрнутом поретку

Za ovaj zadatak možete videti rešenje
pokušalo: 51, rešilo: 92%

Биг ендиан

pokušalo: 20, rešilo: 95%

Ознака редоследа бајтова

pokušalo: 18, rešilo: 77%

Број UTF-8 симбола

pokušalo: 19, rešilo: 78%

Теме правоугаоника

Za ovaj zadatak možete videti rešenje
pokušalo: 22, rešilo: 95%

Већи чаробњак

Za ovaj zadatak možete videti rešenje
pokušalo: 42, rešilo: 95%

Пребројавање комбинације битова

Za ovaj zadatak možete videti rešenje
pokušalo: 24, rešilo: 95%

Најбројнији подскуп

pokušalo: 25, rešilo: 88%

Чешћи елементи

pokušalo: 7, rešilo: 85%

Путања

pokušalo: 7, rešilo: 85%

Топ

Za ovaj zadatak možete videti rešenje
pokušalo: 7, rešilo: 85%

Краљ битови

Za ovaj zadatak možete videti rešenje
pokušalo: 22, rešilo: 95%

Скакач битови

pokušalo: 4, rešilo: 75%

Ловац битови

pokušalo: 4, rešilo: 75%

Уклапање у узорак

Za ovaj zadatak možete videti rešenje
pokušalo: 7, rešilo: 85%

Периодичност

Za ovaj zadatak možete videti rešenje
pokušalo: 8, rešilo: 75%